'use strict';

module.exports = app => {
  const { STRING, ENUM, INTEGER } = app.Sequelize;

  // 用户
  const User = app.model.define('user', {
    // 角色
    role: {
      type: ENUM,
      values: [ 'admin', 'facilitator', 'higher', 'member', 'general' ],
    },
    // 昵称（会员）
    nickname: STRING,
    // 姓名
    name: STRING,
    // 余额
    balance: { type: INTEGER, allowNull: false, defaultValue: 0 },
    // 待可用余额
    awaitBalance: { type: INTEGER, allowNull: false, defaultValue: 0 },
    // 会员到期日期
    memberExpiredDate: STRING(8),
    // 收货地址
    receiverAddress: STRING,
    // 收货人名称
    receiverName: STRING,
    // 收货手机号
    receiverPhone: STRING,
  });

  User.associate = function() {
    // 主图
    User.belongsTo(app.model.File, { as: 'image' });
    // 优惠券
    User.hasMany(app.model.Coupon);
    // 用户的邀请者（会员）
    User.belongsTo(app.model.User, { as: 'inviter', foreignKey: 'inviterId', targetKey: 'id' });
    // 会员邀请的用户
    User.hasMany(app.model.User, { as: 'invitees', foreignKey: 'inviterId', sourceKey: 'id' });
    // 订单
    User.hasMany(app.model.Order);
    // 佣金
    User.hasMany(app.model.CommissionLog);
    // 团队佣金日志
    User.hasMany(app.model.GroupCommissionLog);
    // 手机号
    User.hasOne(app.model.Phone);
    // 支付宝帐号
    User.hasOne(app.model.Alipay);
    // 店主
    User.hasOne(app.model.Store, { as: 'managedStore', foreignKey: 'userId' });
    // 店铺服务商
    User.hasMany(app.model.Store, { as: 'addStore', foreignKey: 'facilitatorId' });
    // 微信账户
    User.hasOne(app.model.WechatAccount);
    // 余额变动
    User.hasOne(app.model.BalanceRecord);
    // 收藏者（收藏店铺的用户）
    User.belongsToMany(app.model.Store, { through: 'follow' });
  };

  return User;
};
